1 /*
2 
3 Boost Software License - Version 1.0 - August 17th, 2003
4 
5 Permission is hereby granted, free of charge, to any person or organization
6 obtaining a copy of the software and accompanying documentation covered by
7 this license (the "Software") to use, reproduce, display, distribute,
8 execute, and transmit the Software, and to prepare derivative works of the
9 Software, and to permit third-parties to whom the Software is furnished to
10 do so, all subject to the following:
11 
12 The copyright notices in the Software and this entire statement, including
13 the above license grant, this restriction and the following disclaimer,
14 must be included in all copies of the Software, in whole or in part, and
15 all derivative works of the Software, unless such copies or derivative
16 works are solely in the form of machine-executable object code generated by
17 a source language processor.
18 
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25 DEALINGS IN THE SOFTWARE.
26 
27 */ 
28 
29 module derelict.purple.ft;
30 
31 import derelict.glib.gtypes;
32 import derelict.glib.glibconfig;
33 import derelict.glib.glist;
34 import derelict.purple.account;
35 import core.stdc.config;
36 import core.stdc.stdio;
37 import core.stdc.time;
38 
39 extern (C):
40 
41 alias _PurpleXfer PurpleXfer;
42 alias _Anonymous_0 PurpleXferType;
43 alias _Anonymous_1 PurpleXferStatusType;
44 alias _Anonymous_2 PurpleXferUiOps;
45 
46 enum _Anonymous_0
47 {
48 	PURPLE_XFER_UNKNOWN = 0,
49 	PURPLE_XFER_SEND = 1,
50 	PURPLE_XFER_RECEIVE = 2
51 }
52 
53 enum _Anonymous_1
54 {
55 	PURPLE_XFER_STATUS_UNKNOWN = 0,
56 	PURPLE_XFER_STATUS_NOT_STARTED = 1,
57 	PURPLE_XFER_STATUS_ACCEPTED = 2,
58 	PURPLE_XFER_STATUS_STARTED = 3,
59 	PURPLE_XFER_STATUS_DONE = 4,
60 	PURPLE_XFER_STATUS_CANCEL_LOCAL = 5,
61 	PURPLE_XFER_STATUS_CANCEL_REMOTE = 6
62 }
63 
64 struct _Anonymous_2
65 {
66 	void function (PurpleXfer*) new_xfer;
67 	void function (PurpleXfer*) destroy;
68 	void function (PurpleXfer*) add_xfer;
69 	void function (PurpleXfer*, double) update_progress;
70 	void function (PurpleXfer*) cancel_local;
71 	void function (PurpleXfer*) cancel_remote;
72 	gssize function (PurpleXfer*, const(guchar)*, gssize) ui_write;
73 	gssize function (PurpleXfer*, guchar**, gssize) ui_read;
74 	void function (PurpleXfer*, const(guchar)*, gsize) data_not_sent;
75 	void function (PurpleXfer*, const(gchar)*) add_thumbnail;
76 }
77 
78 struct _PurpleXfer
79 {
80 	guint ref_;
81 	PurpleXferType type;
82 	PurpleAccount* account;
83 	char* who;
84 	char* message;
85 	char* filename;
86 	char* local_filename;
87 	size_t size;
88 	FILE* dest_fp;
89 	char* remote_ip;
90 	int local_port;
91 	int remote_port;
92 	int fd;
93 	int watcher;
94 	size_t bytes_sent;
95 	size_t bytes_remaining;
96 	time_t start_time;
97 	time_t end_time;
98 	size_t current_buffer_size;
99 	PurpleXferStatusType status;
100 	struct
101 	{
102 		void function (PurpleXfer*) init;
103 		void function (PurpleXfer*) request_denied;
104 		void function (PurpleXfer*) start;
105 		void function (PurpleXfer*) end;
106 		void function (PurpleXfer*) cancel_send;
107 		void function (PurpleXfer*) cancel_recv;
108 		gssize function (guchar**, PurpleXfer*) read;
109 		gssize function (const(guchar)*, size_t, PurpleXfer*) write;
110 		void function (PurpleXfer*, const(guchar)*, size_t) ack;
111 	}
112 	PurpleXferUiOps* ui_ops;
113 	void* ui_data;
114 	void* data;
115 }
116 
117 version(Derelict_Link_Static)
118 {
119     extern( C ) nothrow 
120     {
121         PurpleXfer* purple_xfer_new(PurpleAccount* account, PurpleXferType type, const(char)* who);
122         GList* purple_xfers_get_all();
123         void purple_xfer_ref(PurpleXfer* xfer);
124         void purple_xfer_unref(PurpleXfer* xfer);
125         void purple_xfer_request(PurpleXfer* xfer);
126         void purple_xfer_request_accepted(PurpleXfer* xfer, const(char)* filename);
127         void purple_xfer_request_denied(PurpleXfer* xfer);
128         PurpleXferType purple_xfer_get_type(const(PurpleXfer)* xfer);
129         PurpleAccount* purple_xfer_get_account(const(PurpleXfer)* xfer);
130         const(char)* purple_xfer_get_remote_user(const(PurpleXfer)* xfer);
131         PurpleXferStatusType purple_xfer_get_status(const(PurpleXfer)* xfer);
132         gboolean purple_xfer_is_canceled(const(PurpleXfer)* xfer);
133         gboolean purple_xfer_is_completed(const(PurpleXfer)* xfer);
134         const(char)* purple_xfer_get_filename(const(PurpleXfer)* xfer);
135         const(char)* purple_xfer_get_local_filename(const(PurpleXfer)* xfer);
136         size_t purple_xfer_get_bytes_sent(const(PurpleXfer)* xfer);
137         size_t purple_xfer_get_bytes_remaining(const(PurpleXfer)* xfer);
138         size_t purple_xfer_get_size(const(PurpleXfer)* xfer);
139         double purple_xfer_get_progress(const(PurpleXfer)* xfer);
140         uint purple_xfer_get_local_port(const(PurpleXfer)* xfer);
141         const(char)* purple_xfer_get_remote_ip(const(PurpleXfer)* xfer);
142         uint purple_xfer_get_remote_port(const(PurpleXfer)* xfer);
143         time_t purple_xfer_get_start_time(const(PurpleXfer)* xfer);
144         time_t purple_xfer_get_end_time(const(PurpleXfer)* xfer);
145         void purple_xfer_set_completed(PurpleXfer* xfer, gboolean completed);
146         void purple_xfer_set_message(PurpleXfer* xfer, const(char)* message);
147         void purple_xfer_set_filename(PurpleXfer* xfer, const(char)* filename);
148         void purple_xfer_set_local_filename(PurpleXfer* xfer, const(char)* filename);
149         void purple_xfer_set_size(PurpleXfer* xfer, size_t size);
150         void purple_xfer_set_bytes_sent(PurpleXfer* xfer, size_t bytes_sent);
151         PurpleXferUiOps* purple_xfer_get_ui_ops(const(PurpleXfer)* xfer);
152         void purple_xfer_set_read_fnc(PurpleXfer* xfer, gssize function (guchar**, PurpleXfer*) fnc);
153         void purple_xfer_set_write_fnc(PurpleXfer* xfer, gssize function (const(guchar)*, size_t, PurpleXfer*) fnc);
154         void purple_xfer_set_ack_fnc(PurpleXfer* xfer, void function (PurpleXfer*, const(guchar)*, size_t) fnc);
155         void purple_xfer_set_request_denied_fnc(PurpleXfer* xfer, void function (PurpleXfer*) fnc);
156         void purple_xfer_set_init_fnc(PurpleXfer* xfer, void function (PurpleXfer*) fnc);
157         void purple_xfer_set_start_fnc(PurpleXfer* xfer, void function (PurpleXfer*) fnc);
158         void purple_xfer_set_end_fnc(PurpleXfer* xfer, void function (PurpleXfer*) fnc);
159         void purple_xfer_set_cancel_send_fnc(PurpleXfer* xfer, void function (PurpleXfer*) fnc);
160         void purple_xfer_set_cancel_recv_fnc(PurpleXfer* xfer, void function (PurpleXfer*) fnc);
161         gssize purple_xfer_read(PurpleXfer* xfer, guchar** buffer);
162         gssize purple_xfer_write(PurpleXfer* xfer, const(guchar)* buffer, gsize size);
163         void purple_xfer_start(PurpleXfer* xfer, int fd, const(char)* ip, uint port);
164         void purple_xfer_end(PurpleXfer* xfer);
165         void purple_xfer_add(PurpleXfer* xfer);
166         void purple_xfer_cancel_local(PurpleXfer* xfer);
167         void purple_xfer_cancel_remote(PurpleXfer* xfer);
168         void purple_xfer_error(PurpleXferType type, PurpleAccount* account, const(char)* who, const(char)* msg);
169         void purple_xfer_update_progress(PurpleXfer* xfer);
170         void purple_xfer_conversation_write(PurpleXfer* xfer, char* message, gboolean is_error);
171         void purple_xfer_ui_ready(PurpleXfer* xfer);
172         void purple_xfer_prpl_ready(PurpleXfer* xfer);
173         gconstpointer purple_xfer_get_thumbnail(const(PurpleXfer)* xfer, gsize* len);
174         const(gchar)* purple_xfer_get_thumbnail_mimetype(const(PurpleXfer)* xfer);
175         void purple_xfer_set_thumbnail(PurpleXfer* xfer, gconstpointer thumbnail, gsize size, const(gchar)* mimetype);
176         void purple_xfer_prepare_thumbnail(PurpleXfer* xfer, const(gchar)* formats);
177         void* purple_xfers_get_handle();
178         void purple_xfers_init();
179         void purple_xfers_uninit();
180         void purple_xfers_set_ui_ops(PurpleXferUiOps* ops);
181         PurpleXferUiOps* purple_xfers_get_ui_ops();
182     }
183 }
184 else
185 {
186     extern( C ) nothrow 
187     {
188         alias da_purple_xfer_new = PurpleXfer* function(PurpleAccount* account, PurpleXferType type, const(char)* who);							
189         alias da_purple_xfers_get_all = GList* function();																						
190         alias da_purple_xfer_ref = void function(PurpleXfer* xfer);																				
191         alias da_purple_xfer_unref = void function(PurpleXfer* xfer);																			
192         alias da_purple_xfer_request = void function(PurpleXfer* xfer);																			
193         alias da_purple_xfer_request_accepted = void function(PurpleXfer* xfer, const(char)* filename);											
194         alias da_purple_xfer_request_denied = void function(PurpleXfer* xfer);																	
195         alias da_purple_xfer_get_type = PurpleXferType function(const(PurpleXfer)* xfer);														
196         alias da_purple_xfer_get_account = PurpleAccount* function(const(PurpleXfer)* xfer);													
197         alias da_purple_xfer_get_remote_user = const(char)* function(const(PurpleXfer)* xfer);													
198         alias da_purple_xfer_get_status = PurpleXferStatusType function(const(PurpleXfer)* xfer);												
199         alias da_purple_xfer_is_canceled = gboolean function(const(PurpleXfer)* xfer);															
200         alias da_purple_xfer_is_completed = gboolean function(const(PurpleXfer)* xfer);															
201         alias da_purple_xfer_get_filename = const(char)* function(const(PurpleXfer)* xfer);														
202         alias da_purple_xfer_get_local_filename = const(char)* function(const(PurpleXfer)* xfer);												
203         alias da_purple_xfer_get_bytes_sent = size_t function(const(PurpleXfer)* xfer);															
204         alias da_purple_xfer_get_bytes_remaining = size_t function(const(PurpleXfer)* xfer);													
205         alias da_purple_xfer_get_size = size_t function(const(PurpleXfer)* xfer);																
206         alias da_purple_xfer_get_progress = double function(const(PurpleXfer)* xfer);															
207         alias da_purple_xfer_get_local_port = uint function(const(PurpleXfer)* xfer);															
208         alias da_purple_xfer_get_remote_ip = const(char)* function(const(PurpleXfer)* xfer);													
209         alias da_purple_xfer_get_remote_port = uint function(const(PurpleXfer)* xfer);															
210         alias da_purple_xfer_get_start_time = time_t function(const(PurpleXfer)* xfer);															
211         alias da_purple_xfer_get_end_time = time_t function(const(PurpleXfer)* xfer);															
212         alias da_purple_xfer_set_completed = void function(PurpleXfer* xfer, gboolean completed);												
213         alias da_purple_xfer_set_message = void function(PurpleXfer* xfer, const(char)* message);												
214         alias da_purple_xfer_set_filename = void function(PurpleXfer* xfer, const(char)* filename);												
215         alias da_purple_xfer_set_local_filename = void function(PurpleXfer* xfer, const(char)* filename);										
216         alias da_purple_xfer_set_size = void function(PurpleXfer* xfer, size_t size);															
217         alias da_purple_xfer_set_bytes_sent = void function(PurpleXfer* xfer, size_t bytes_sent);												
218         alias da_purple_xfer_get_ui_ops = PurpleXferUiOps* function(const(PurpleXfer)* xfer);													
219         alias da_purple_xfer_set_read_fnc = void function(PurpleXfer* xfer, gssize function (guchar**, PurpleXfer*) fnc);						
220         alias da_purple_xfer_set_write_fnc = void function(PurpleXfer* xfer, gssize function (const(guchar)*, size_t, PurpleXfer*) fnc);		
221         alias da_purple_xfer_set_ack_fnc = void function(PurpleXfer* xfer, void function (PurpleXfer*, const(guchar)*, size_t) fnc);			
222         alias da_purple_xfer_set_request_denied_fnc = void function(PurpleXfer* xfer, void function (PurpleXfer*) fnc);							
223         alias da_purple_xfer_set_init_fnc = void function(PurpleXfer* xfer, void function (PurpleXfer*) fnc);									
224         alias da_purple_xfer_set_start_fnc = void function(PurpleXfer* xfer, void function (PurpleXfer*) fnc);									
225         alias da_purple_xfer_set_end_fnc = void function(PurpleXfer* xfer, void function (PurpleXfer*) fnc);									
226         alias da_purple_xfer_set_cancel_send_fnc = void function(PurpleXfer* xfer, void function (PurpleXfer*) fnc);							
227         alias da_purple_xfer_set_cancel_recv_fnc = void function(PurpleXfer* xfer, void function (PurpleXfer*) fnc);							
228         alias da_purple_xfer_read = gssize function(PurpleXfer* xfer, guchar** buffer);															
229         alias da_purple_xfer_write = gssize function(PurpleXfer* xfer, const(guchar)* buffer, gsize size);										
230         alias da_purple_xfer_start = void function(PurpleXfer* xfer, int fd, const(char)* ip, uint port);										
231         alias da_purple_xfer_end = void function(PurpleXfer* xfer);																				
232         alias da_purple_xfer_add = void function(PurpleXfer* xfer);																				
233         alias da_purple_xfer_cancel_local = void function(PurpleXfer* xfer);																	
234         alias da_purple_xfer_cancel_remote = void function(PurpleXfer* xfer);																	
235         alias da_purple_xfer_error = void function(PurpleXferType type, PurpleAccount* account, const(char)* who, const(char)* msg);			
236         alias da_purple_xfer_update_progress = void function(PurpleXfer* xfer);																	
237         alias da_purple_xfer_conversation_write = void function(PurpleXfer* xfer, char* message, gboolean is_error);							
238         alias da_purple_xfer_ui_ready = void function(PurpleXfer* xfer);																		
239         alias da_purple_xfer_prpl_ready = void function(PurpleXfer* xfer);																		
240         alias da_purple_xfer_get_thumbnail = gconstpointer function(const(PurpleXfer)* xfer, gsize* len);										
241         alias da_purple_xfer_get_thumbnail_mimetype = const(gchar)* function(const(PurpleXfer)* xfer);											
242         alias da_purple_xfer_set_thumbnail = void function(PurpleXfer* xfer, gconstpointer thumbnail, gsize size, const(gchar)* mimetype);		
243         alias da_purple_xfer_prepare_thumbnail = void function(PurpleXfer* xfer, const(gchar)* formats);										
244         alias da_purple_xfers_get_handle = void* function();																					
245         alias da_purple_xfers_init = void function();																							
246         alias da_purple_xfers_uninit = void function();																							
247         alias da_purple_xfers_set_ui_ops = void function(PurpleXferUiOps* ops);																	
248         alias da_purple_xfers_get_ui_ops = PurpleXferUiOps* function();		
249     }
250 
251     __gshared
252     {
253 	    da_purple_xfer_new purple_xfer_new;
254 	    da_purple_xfers_get_all purple_xfers_get_all;
255 	    da_purple_xfer_ref purple_xfer_ref;
256 	    da_purple_xfer_unref purple_xfer_unref;
257 	    da_purple_xfer_request purple_xfer_request;
258 	    da_purple_xfer_request_accepted purple_xfer_request_accepted;
259 	    da_purple_xfer_request_denied purple_xfer_request_denied;
260 	    da_purple_xfer_get_type purple_xfer_get_type;
261 	    da_purple_xfer_get_account purple_xfer_get_account;
262 	    da_purple_xfer_get_remote_user purple_xfer_get_remote_user;
263 	    da_purple_xfer_get_status purple_xfer_get_status;
264 	    da_purple_xfer_is_canceled purple_xfer_is_canceled;
265 	    da_purple_xfer_is_completed purple_xfer_is_completed;
266 	    da_purple_xfer_get_filename purple_xfer_get_filename;
267 	    da_purple_xfer_get_local_filename purple_xfer_get_local_filename;
268 	    da_purple_xfer_get_bytes_sent purple_xfer_get_bytes_sent;
269 	    da_purple_xfer_get_bytes_remaining purple_xfer_get_bytes_remaining;
270 	    da_purple_xfer_get_size purple_xfer_get_size;
271 	    da_purple_xfer_get_progress purple_xfer_get_progress;
272 	    da_purple_xfer_get_local_port purple_xfer_get_local_port;
273 	    da_purple_xfer_get_remote_ip purple_xfer_get_remote_ip;
274 	    da_purple_xfer_get_remote_port purple_xfer_get_remote_port;
275 	    da_purple_xfer_get_start_time purple_xfer_get_start_time;
276 	    da_purple_xfer_get_end_time purple_xfer_get_end_time;
277 	    da_purple_xfer_set_completed purple_xfer_set_completed;
278 	    da_purple_xfer_set_message purple_xfer_set_message;
279 	    da_purple_xfer_set_filename purple_xfer_set_filename;
280 	    da_purple_xfer_set_local_filename purple_xfer_set_local_filename;
281 	    da_purple_xfer_set_size purple_xfer_set_size;
282 	    da_purple_xfer_set_bytes_sent purple_xfer_set_bytes_sent;
283 	    da_purple_xfer_get_ui_ops purple_xfer_get_ui_ops;
284 	    da_purple_xfer_set_read_fnc purple_xfer_set_read_fnc;
285 	    da_purple_xfer_set_write_fnc purple_xfer_set_write_fnc;
286 	    da_purple_xfer_set_ack_fnc purple_xfer_set_ack_fnc;
287 	    da_purple_xfer_set_request_denied_fnc purple_xfer_set_request_denied_fnc;
288 	    da_purple_xfer_set_init_fnc purple_xfer_set_init_fnc;
289 	    da_purple_xfer_set_start_fnc purple_xfer_set_start_fnc;
290 	    da_purple_xfer_set_end_fnc purple_xfer_set_end_fnc;
291 	    da_purple_xfer_set_cancel_send_fnc purple_xfer_set_cancel_send_fnc;
292 	    da_purple_xfer_set_cancel_recv_fnc purple_xfer_set_cancel_recv_fnc;
293 	    da_purple_xfer_read purple_xfer_read;
294 	    da_purple_xfer_write purple_xfer_write;
295 	    da_purple_xfer_start purple_xfer_start;
296 	    da_purple_xfer_end purple_xfer_end;
297 	    da_purple_xfer_add purple_xfer_add;
298 	    da_purple_xfer_cancel_local purple_xfer_cancel_local;
299 	    da_purple_xfer_cancel_remote purple_xfer_cancel_remote;
300 	    da_purple_xfer_error purple_xfer_error;
301 	    da_purple_xfer_update_progress purple_xfer_update_progress;
302 	    da_purple_xfer_conversation_write purple_xfer_conversation_write;
303 	    da_purple_xfer_ui_ready purple_xfer_ui_ready;
304 	    da_purple_xfer_prpl_ready purple_xfer_prpl_ready;
305 	    da_purple_xfer_get_thumbnail purple_xfer_get_thumbnail;
306 	    da_purple_xfer_get_thumbnail_mimetype purple_xfer_get_thumbnail_mimetype;
307 	    da_purple_xfer_set_thumbnail purple_xfer_set_thumbnail;
308 	    da_purple_xfer_prepare_thumbnail purple_xfer_prepare_thumbnail;
309 	    da_purple_xfers_get_handle purple_xfers_get_handle;
310 	    da_purple_xfers_init purple_xfers_init;
311 	    da_purple_xfers_uninit purple_xfers_uninit;
312 	    da_purple_xfers_set_ui_ops purple_xfers_set_ui_ops;
313 	    da_purple_xfers_get_ui_ops purple_xfers_get_ui_ops;	
314     }
315 }